<?php
/////////////////////////////////////////////////////////////////////////////
// 
//
// workflow_system
//
// workflow_copyright
// 
/////////////////////////////////////////////////////////////////////////////

/**
 * FILE_NAME : baseinitialize.core.php   FILE_PATH : \\classes\core\baseinitialize.core.php
 * ....系统基本初始化类
 * 一般操作/应用类继承此类
 *
 * @copyright workflow_system 
 * @author workflow Develop Team  
 * @package 
 * @subpackage 
 * @version Tue Aug 07 12:48:14 CST 2007
 */

class BaseInitialize extends BaseNC {
	/**
	 * 错误级别
	 *
	 * @var int
	 */
	var $_errorlevel = 7;	
	/**
	 * 字符编码
	 *
	 * @var string
	 */
	var $_charset = "UTF-8";
	/**
	 * 文件类型
	 *
	 * @var string
	 */
	var $_contenttype = "text/html";
	/**
	 * 系统级配置信息
	 *
	 * @var var[]
	 */
	var $_systeminfo = array();
	/**
	 * 用户级配置信息
	 *
	 * @var var[]
	 */
	var $_configinfo = array();
	/**
	 * 上一个页面的URL地址
	 *
	 * @var string
	 */
	var $refer_url = "";
	/**
	 * 当前页面URL地址
	 *
	 * @var string
	 */
	var $cur_url = "";
	/**
	 * 浏览者IP地址
	 *
	 * @var string
	 */
	var $agent_ip = "";
	/**
	 * SESSION过期时间，单位为分钟，默认为10个小时，一般PHP.INI设置为120分钟
	 *
	 * @var int
	 */
	var $session_expire_time = 600;
	/**
	 * cookie过期时间，单位为1/1000秒，默认为10个小时
	 *
	 * @var int
	 */
	var $cookie_expire_time = 36000000;
	/**
	 * 上个页面所得到的表单信息，用于表单提交后发生错误，返回上一页面的表单显示所填写的值
	 *
	 * @var var[]
	 */
	var $cookie_back_form = array();
	/**
	 * 通过post\get传递过来的参数
	 *
	 * @var var[]
	 */
	var $_input = array();
	/**
	 * session_id
	 * 
	 * @var var[]
	 */
	var $session_id = "";
	/**
	 * 检测版权功能开关
	 * true 为检测，false为不检测
	 * @var var[]
	 */
	var $check_powerby = FALSE;
	/**
	 * 缓存操作对象
	 * 
	 * @var obj
	 */
	var $obj_ini_cache;
	/**
	 * 站点配置信息
	 * 
	 * @var obj
	 */
	var $_websitconfig = array();
	/**
	 * 数据库配置信息
	 * 
	 * @var obj
	 */
	var $_dbconfig = array();
	/**
	 * 文件配置信息
	 * 
	 * @var obj
	 */
	var $_fileconfig = array();
	/**
	 * 默认系统时区
	 * 
	 * @var obj
	 */
	var $date_default_timezone = 'Asia/Shanghai';
	/**
	 * 默认系统时区
	 * 
	 * @var int
	 */
	var $_umask = 0022;
	
	/**
	 * 系统初始化
	 * 此方法需被继承的类执行
	 *
	 */
	function _initialize(){
		
		//设置报错等级
		error_reporting($this->_errorlevel);
		
		//Base_Use_Sign
		define('Base_Use_Sign',true);
		/**
		 * 用于使用FILE函数
		 */
		ini_set("allow_url_fopen","1");
		
		//初始化时区
		if(function_exists('date_default_timezone_set')){
			date_default_timezone_set($this->date_default_timezone);
		}
		
		//初始化umask设定
		umask($this->_umask);
		
		//缓存类初始化
		$this->_getObjCache();
		
		//取系统配置基本信息
		$this->_getConfiginfo();
		
		//取系统版本信息
		$this->_getSysVersion();
		
		/*
		 * 支持zlib输出
		 */
		if(function_exists('ob_gzhandler') && $this->_configinfo['websit']['gzip'] == 1) {
			@ob_start("ob_gzhandler");
		} else {
			@ob_start();
		}
		
		/**
		 * 设定SESSION过期时间
		 */
		if (intval($this->_configinfo['cookie']['session_expire']) > 0){
			$this->session_expire_time = intval($this->_configinfo['cookie']['session_expire']);
			session_set_cookie_params($this->session_expire_time*60,$this->_configinfo['cookie']['cookiepath'],$this->_configinfo['cookie']['cookiedomain']);
			session_cache_expire($this->session_expire_time);
		}
		if ($_SESSION["s_login"]['login'] == '' && $_COOKIE['c_session_id'] != ''){
			session_id($_COOKIE['c_session_id']);
			@session_start();
		}else {
			@session_start();
		}
//		print_r(session_get_cookie_params ());exit;
//		session_cache_expire($this->session_expire_time);
		/**
		 * 设定COOKIE过期时间
		 */
		if (intval($this->_configinfo['cookie']['cookie_expire']) > 0){
			$this->cookie_expire_time = intval($this->_configinfo['cookie']['cookie_expire']);
		}
		
		/**
		 * 设置文件编码和文件类型
		 */
		$this->_charset = $this->_configinfo['websit']['ncharset']?strtoupper($this->_configinfo['websit']['ncharset']):$this->_charset;
		@header("Content-type: " . $this->_contenttype . "; charset=" . $this->_charset);
		/** 
		 * 设置包含路径
		 */
		$this->_setincludepage();
		
		/**
		 * 通用参数
		 */
		if (array_key_exists('HTTP_REFERER',$_SERVER)){
			$this->refer_url = $_SERVER['HTTP_REFERER'];  //上一页URL地址
		}else{
			$this->refer_url = "";
		}
		
		$this->cur_url   = Common::getCurrUrl();      //本页URL地址
		$this->agent_ip  = $_SERVER['REMOTE_ADDR'];   //浏览者IP地址
		$this->request_uri();//request_uri通用方法
		
		/**
		 * 得到POST，GET过来的值，并进行处理，通过$this->_input['formname']形式来调用表单传过来的值
		 */		 
		$this->_getparam();
		
		/**
		 * 获得上个页面所得到的表单信息，用于表单提交后发生错误，返回上一页面的表单显示所填写的值
		 */
		$this->cookie_back_form = $this->getCookies('back');
		
	}
	
	/**
	 * 得到系统配置信息
	 * @param string $inifile 配置文件名称
	 * @return string[] 二维数组，一维为INI的区信息，二维为INI的键信息，格式如$ini['section']['key']
	 */
	function _getconfigini($inifile, $charset='UTF-8'){
		//缓存类初始化
		$this->_getObjCache();
		$this->obj_ini_cache->OperateCacheFile($inifile,'ini',$charset);
		return $this->obj_ini_cache->cache_array;
		
	}
	
	/**
	 * 设置包含路径，包含路径从系统配置文件中设置
	 *
	 */
	function _setincludepage(){
		/**
		 *  判断当前操作系统类型，以获得路径分割符号
		 *  并在这里初始化INCLUDE的路径
		 */
		$TurnDot  = substr(PHP_OS, 0, 3) == 'WIN'  ?  ";"  :  ":"  ;
		$patharray = explode(",",$this->_systeminfo['global']['includepath']);
		$lib_root = ".";
		foreach ($patharray as $k => $v){
			$lib_root .= $TurnDot . BasePath."/".$v;
		}	
		ini_set("include_path",$lib_root);
	}
	
	/**
	 * 整理POST，GET，COOKIE参数，并把参数统一放入数组中
	 *
	 */
	function _getparam(){
		$this->_input = !empty($_GET)?Common::input_addslashes_for_get_array($_GET):array();
		$this->_input = !empty($_POST)?array_merge($this->_input,Common::input_addslashes_array($_POST)):$this->_input;
		$_COOKIE = Common::input_addslashes_array($_COOKIE);
	}
	
	/**
	 * 设置COOKIE
	 *
	 * @param string $var COOKIE名字
	 * @param var $value COOKIE值
	 * @param int $life 生存时间
	 */
	function setCookies($var, $value, $life = 36000000) {
		setcookie($this->_configinfo['cookie']['cookiepre'] . $var, $value,$life ? time() + $life : 0, $this->_configinfo['cookie']['cookiepath'],$this->_configinfo['cookie']['cookiedomain'], $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
	}
	
	/**
	 * 得到某COOKIE值
	 *
	 * @param string $var COOKIE名称
	 * @return var
	 */
	function getCookies($var){
		return $_COOKIE[$this->_configinfo['cookie']['cookiepre'] . $var];
	}
	
	/**
	 * REQUEST_URI 的通用方法
	 * @author workflow Develop Team     
	 * @param  
	 * @return int/bool/object/array/string
	 */
	function request_uri(){
		if (isset($_SERVER['REQUEST_URI'])){
			return true;
		}else{
			if (isset($_SERVER['argv'])){
				$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
			}else{
				$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
			}
			return true;
		}
	}
	
	/**
	 * 得到配置信息内容
	 * @author workflow Develop Team     
	 * @param  
	 * @return array
	 */
	function _getConfiginfo(){
		/**
		 * 得到配置信息内容
		 */
		$this->_configinfo = $this->_getconfigini("config.ini.php");   //普通配置信息
				
		$this->_systeminfo = $this->_getconfigini("system.ini.php",$this->_charset);   //系统配置信息，用于开发人员配置

		$this->_websitconfig = $this->_configinfo["websit"];//得到站点配置信息内容
		
		$GLOBALS['dbconfig'] = $this->_dbconfig = $this->_configinfo['database'];//得到数据库配置信息内容
		
		$this->_fileconfig = $this->_configinfo["file"];//得到文件配置信息内容
		
	}
	
	/**
	 * 取版本信息
	 * @author workflow Develop Team     
	 * @param  
	 * @return array
	 */
	function _getSysVersion(){
		/* version */
		$this->_systeminfo['version']['project'] = "ShopNC ";
		
		$this->_systeminfo['version']['revision'] = "v2.6";
		
		$this->_systeminfo['version']['type'] = " ";
		/*
		if (date("Ymd") > 20081209){
			$this->_systeminfo['version']['type'] .= "(测试版软件将于2008-12-9过期，请访问<a href='http://www.shopnc.net' target=_blank>ShopNC官方网站</a>下载最新版本)";
		}else{
			$this->_systeminfo['version']['type'] .= "(valid from 2008-11-24 to 2008-12-12)";
		}*/
		$this->_systeminfo['version']['domain'] = array("127.0.0.1","localhost");
		
		$this->_systeminfo['version']['version'] = $this->_systeminfo['version']['project'].' '.$this->_systeminfo['version']['revision']." ".$this->_systeminfo['version']['type'];
	}
	
	/**
	 * 缓存类初始化
	 * @author workflow Develop Team     
	 * @param  
	 * @return object
	 */
	function _getObjCache(){
		if (!is_object($this->obj_ini_cache)){
			$this->obj_ini_cache = new OperateCache();
		}
	}
}
?>